#include <iostream>

using namespace std;

const int N = 1e5 + 10, M = 1e6 + 10;

// 链表
int h, id, e[N], ne[N];
int mp[M]; // mp[i] 用来标记 i 这个元素存在什么位置

int main()
{
    int q; cin >> q;

    // 初始化
    id++;
    e[id] = 1;
    mp[1] = id;

    while(q--)
    {
        int op, x, y;
        cin >> op >> x;
        int p = mp[x]; // x 存的位置

        if(op == 1) // x 后面插入
        {
            cin >> y;

            id++;
            e[id] = y;
            ne[id] = ne[p];
            ne[p] = id;

            mp[y] = id; // 标记 y 这个元素存的位置
        }
        else if(op == 2) // 查询 x 后面的元素
        {
            cout << e[ne[p]] << endl;
        }
        else // 删除 x 后面的元素
        {
            ne[p] = ne[ne[p]];
        }
    }

    return 0;
}